// 引入工具类
const aes = require('../../utils/aes.js');
const api = require('../../utils/api.js');
const storage = require('../../utils/storage.js');

Page({
  data: {
    // 🔥 登录步骤控制
    step: 'initial',         // 'initial'：初始状态, 'phone'：输入手机号, 'code'：输入验证码
    phone: '',               // 手机号
    code: '',                // 验证码
    codeArray: [],           // 🔥 验证码数组（用于显示6个独立框）
    codeFocus: false,        // 🔥 验证码输入框是否聚焦
    agreed: false,           // ⚠️ 必须由用户主动勾选协议（合规要求）
    countdown: 0,            // 倒计时
    canSendCode: false,      // 是否可以发送验证码
    canLogin: false,         // 是否可以登录
    generatedCode: ''        // 生成的验证码（用于客户端验证）
  },

  // 🔥 开始授权登录（显示手机号获取界面）
  startLogin() {
    console.log('🚀 开始授权登录流程');
    this.setData({
      step: 'phone',
      agreed: false  // ⚠️ 不默认勾选，让用户主动勾选
    });
  },

  // 🔥 返回首页
  goToHome() {
    console.log('🏠 返回首页');
    wx.switchTab({
      url: '/pages/main/index'
    });
  },

  // 🔥 手机号输入
  onPhoneInput(e) {
    const phone = e.detail.value;
    this.setData({ phone });
    this.checkCanSendCode();
    console.log('📱 手机号输入:', phone);
  },

  // 🔥 点击验证码框，聚焦隐藏输入框
  focusCodeInput() {
    console.log('🔍 聚焦验证码输入框');
    this.setData({ 
      codeFocus: true 
    });
  },

  // 验证码输入
  onCodeInput(e) {
    const code = e.detail.value;
    // 🔥 将验证码字符串转换为数组，用于显示6个独立框
    const codeArray = code.split('');
    this.setData({ 
      code,
      codeArray 
    });
    this.checkCanLogin();
    
    // 🔥 输入满6位验证码后自动登录
    if (code.length === 6) {
      console.log('✅ 验证码输入完成，自动触发登录');
      setTimeout(() => {
        this.handleLogin();
      }, 500); // 延迟0.5秒，让用户看到输入完成
    }
  },

  // 协议勾选变化
  onAgreeChange(e) {
    const agreed = e.detail.value.includes('agree');
    this.setData({ agreed });
    this.checkCanSendCode();
    this.checkCanLogin();
  },

  // 检查是否可以发送验证码
  checkCanSendCode() {
    const { phone, agreed } = this.data;
    const canSendCode = phone.length === 11 && agreed;
    this.setData({ canSendCode });
  },

  // 检查是否可以登录
  checkCanLogin() {
    const { phone, code, agreed } = this.data;
    const canLogin = phone.length === 11 && code.length === 6 && agreed;
    this.setData({ canLogin });
  },

  // 发送验证码
  sendCode() {
    const { phone, agreed, countdown, canSendCode } = this.data;
    
    console.log('📤 =============== 发送验证码 ===============');
    
    // 检查是否可以发送
    if (!canSendCode) {
      if (!phone || phone.length !== 11) {
        wx.showToast({
          title: '请输入正确的手机号',
          icon: 'none'
        });
      } else if (!agreed) {
        wx.showToast({
          title: '请先勾选同意协议',
          icon: 'none'
        });
      }
      return;
    }

    if (countdown > 0) return;

    // 生成验证码（客户端生成）
    const verificationCode = aes.generateVerificationCode(phone);
    this.setData({ generatedCode: verificationCode });
    
    console.log('🔐 生成的验证码:', verificationCode);
    console.log('📱 手机号:', phone);

    // 调用后端接口发送验证码
    api.sendSmsCode(phone, verificationCode)
      .then(response => {
        console.log('✅ 验证码发送成功:', response);
        
        wx.showToast({
          title: '验证码已发送',
          icon: 'success',
          duration: 2000
        });
        
        // 🔥 切换到验证码输入界面，并自动聚焦
        this.setData({ 
          step: 'code',
          codeFocus: true  // 🔥 自动聚焦验证码输入框
        });
        
        // 开始倒计时
        this.startCountdown();
      })
      .catch(error => {
        console.error('❌ 验证码发送失败:', error);
        
        // 即使API失败，也启动倒计时（因为验证码是客户端生成的）
        wx.showToast({
          title: '验证码已生成',
          icon: 'success',
          duration: 2000
        });
        
        // 🔥 切换到验证码输入界面，并自动聚焦
        this.setData({ 
          step: 'code',
          codeFocus: true  // 🔥 自动聚焦验证码输入框
        });
        
        this.startCountdown();
      });
  },

  // 开始倒计时
  startCountdown() {
    let countdown = 60;
    this.setData({ countdown });
    
    const timer = setInterval(() => {
      countdown--;
      this.setData({ countdown });
      
      if (countdown <= 0) {
        clearInterval(timer);
      }
    }, 1000);
  },

  // 🔥 处理登录/注册（合并逻辑）
  handleLogin() {
    const { phone, code, canLogin, generatedCode } = this.data;
    
    console.log('🔐 =============== 开始登录/注册 ===============');
    
    if (!canLogin) {
      wx.showToast({
        title: '请完善登录信息',
        icon: 'none'
      });
      return;
    }

    // 验证验证码
    if (!generatedCode) {
      wx.showToast({
        title: '请先获取验证码',
        icon: 'none'
      });
      return;
    }

    console.log('🎯 生成的验证码:', generatedCode);
    console.log('📝 用户输入的验证码:', code);

    // 验证码匹配检查
    if (code.trim() !== generatedCode.trim()) {
      console.log('❌ 验证码验证失败');
      wx.showToast({
        title: '验证码不正确',
        icon: 'none'
      });
      return;
    }

    console.log('✅ 验证码验证成功，开始登录流程');

    wx.showLoading({ title: '登录中...' });

    // 🔥 调用后端接口检查用户是否存在
    api.checkPhone(phone)
      .then(response => {
        console.log('📨 用户检查响应:', response);

        if (response.exists && response.data) {
          // ✅ 用户已注册，直接登录
          console.log('✅ 用户已存在，直接登录');
          wx.hideLoading();
          this.saveUserAndNavigate(response.data);
        } else {
          // 🔥 用户未注册，自动注册（默认为个人用户）
          console.log('⚠️ 用户未注册，开始自动注册...');
          return this.autoRegister(phone);
        }
      })
      .catch(error => {
        wx.hideLoading();
        console.error('💥 登录/注册失败:', error);
        wx.showToast({
          title: error.message || '登录失败，请重试',
          icon: 'none',
          duration: 2000
        });
      });
  },

  // 🔥 自动注册新用户（默认为个人用户）
  async autoRegister(phone) {
    try {
      console.log('📝 =============== 自动注册新用户 ===============');
      console.log('📱 手机号:', phone);
      console.log('👤 用户类型: 个人用户（默认）');

      wx.showLoading({ title: '注册中...' });

      // 🔥 调用注册API（userType='0'表示个人用户）
      const response = await api.registerWithPhone(phone, '0');

      console.log('✅ 自动注册成功:', response);

      if (response.status === 'success' && response.data) {
        const userData = response.data;

        console.log('👤 新用户信息:', userData);
        console.log('🆔 用户ID:', userData.userid);
        console.log('📛 用户名:', userData.username);
        console.log('🔑 融云Token:', userData.extraData?.token);

        wx.hideLoading();

        // 🔥 自动注册成功后，直接登录
        this.saveUserAndNavigate(userData);

      } else {
        throw new Error(response.message || '注册失败');
      }

    } catch (error) {
      wx.hideLoading();
      console.error('❌ 自动注册失败:', error);

      wx.showToast({
        title: error.message || '注册失败，请重试',
        icon: 'none',
        duration: 2000
      });
    }
  },

  // 保存用户信息并跳转
  saveUserAndNavigate(userInfo) {
    console.log('💾 保存用户信息并跳转');
    console.log('👤 用户信息:', userInfo);

    // 🔥 先获取微信 openid，然后再保存用户信息
    this.getWeChatOpenId()
      .then(openId => {
        console.log('✅ 获取到微信 openid:', openId);
        
        // 🔥 将 openid 添加到用户信息的 extraData 中
        if (!userInfo.extraData) {
          userInfo.extraData = {};
        }
        userInfo.extraData.openid = openId;
        
        // 保存用户信息到本地存储
        const saved = storage.saveUserInfo(userInfo);

        if (saved) {
          console.log('✅ 用户信息保存成功（包含 openid）');
          console.log('📊 用户详情:');
          console.log('  🆔 用户ID:', userInfo.userid);
          console.log('  📛 用户名:', userInfo.username);
          console.log('  📱 手机号:', userInfo.userPhone);
          console.log('  💰 积分:', userInfo.userPoints);
          console.log('  ⭐ 等级:', userInfo.userLevel);
          console.log('  🔑 OpenID:', openId);

          // 🔥 登录成功后立即连接融云IM
          const app = getApp();
          if (app && app.autoConnectRongCloud) {
            console.log('🔄 开始连接融云IM...');
            app.autoConnectRongCloud();
          }

          wx.showToast({
            title: '登录成功',
            icon: 'success',
            duration: 1500,
            success: () => {
              setTimeout(() => {
                // 跳转到首页（主页面）
                wx.switchTab({
                  url: '/pages/main/index'
                });
              }, 1500);
            }
          });
        } else {
          console.error('❌ 保存用户信息失败');
          wx.showToast({
            title: '登录失败，请重试',
            icon: 'none'
          });
        }
      })
      .catch(error => {
        console.warn('⚠️ 获取 openid 失败，但仍然继续登录:', error);
        
        // 即使获取 openid 失败，也允许用户登录（降级处理）
        const saved = storage.saveUserInfo(userInfo);

        if (saved) {
          console.log('✅ 用户信息保存成功（无 openid）');
          console.log('📊 用户详情:');
          console.log('  🆔 用户ID:', userInfo.userid);
          console.log('  📛 用户名:', userInfo.username);
          console.log('  📱 手机号:', userInfo.userPhone);
          console.log('  💰 积分:', userInfo.userPoints);
          console.log('  ⭐ 等级:', userInfo.userLevel);

          // 🔥 登录成功后立即连接融云IM
          const app = getApp();
          if (app && app.autoConnectRongCloud) {
            console.log('🔄 开始连接融云IM...');
            app.autoConnectRongCloud();
          }

          wx.showToast({
            title: '登录成功',
            icon: 'success',
            duration: 1500,
            success: () => {
              setTimeout(() => {
                // 跳转到首页（主页面）
                wx.switchTab({
                  url: '/pages/main/index'
                });
              }, 1500);
            }
          });
        } else {
          console.error('❌ 保存用户信息失败');
          wx.showToast({
            title: '登录失败，请重试',
            icon: 'none'
          });
        }
      });
  },

  // 🔥 获取微信 OpenID（复用微信支付的接口）
  getWeChatOpenId() {
    return new Promise((resolve, reject) => {
      console.log('🔑 =============== 开始获取微信 OpenID ===============');
      
      // 🎯 先检查缓存
      const cachedOpenId = wx.getStorageSync('wx_openid');
      if (cachedOpenId) {
        console.log('✅ 使用缓存的 openid:', cachedOpenId);
        resolve(cachedOpenId);
        return;
      }
      
      wx.login({
        success: (loginRes) => {
          if (loginRes.code) {
            console.log('✅ 获取到微信登录 code:', loginRes.code);
            
            // 🔥 调用后端接口（复用微信支付的 openid 接口）
            wx.request({
              url: 'https://api.playtruly.cn/api/wx/miniapp/login',
              method: 'POST',
              data: {
                code: loginRes.code
              },
              success: (res) => {
                console.log('✅ 获取 openid 响应:', res.data);
                
                // 🔥 后端返回格式：{ code: 200, data: { openid, session_key }, msg: "success" }
                if (res.data.code === 200 && res.data.data && res.data.data.openid) {
                  const openid = res.data.data.openid;
                  console.log('✅ 获取 openid 成功:', openid);
                  
                  // 🔥 缓存 openid（与微信支付保持一致）
                  wx.setStorageSync('wx_openid', openid);
                  
                  resolve(openid);
                } else {
                  console.error('❌ openid 获取失败:', res.data);
                  reject(new Error(res.data.msg || '获取 openid 失败'));
                }
              },
              fail: (err) => {
                console.error('❌ 请求 openid 接口失败:', err);
                reject(err);
              }
            });
          } else {
            console.error('❌ 微信登录失败:', loginRes);
            reject(new Error('微信登录失败'));
          }
        },
        fail: (err) => {
          console.error('❌ wx.login 调用失败:', err);
          reject(err);
        }
      });
    });
  },

  // 打开协议页面
  openAgreement(e) {
    const type = e.currentTarget.dataset.type;
    wx.navigateTo({
      url: `/pages/agreement/index?type=${type}`
    });
  },

  // 🔥 退出登录/注册（返回初始界面）
  exitLogin() {
    console.log('🚪 退出登录/注册，返回初始界面');
    
    // 清空数据，返回初始界面
    this.setData({
      step: 'initial',
      phone: '',
      code: '',
      codeArray: [],
      codeFocus: false, // 🔥 取消聚焦
      agreed: false,     // ⚠️ 重置为未勾选状态
      countdown: 0
    });
    
    wx.showToast({
      title: '已退出',
      icon: 'success',
      duration: 1500
    });
  },

  // 🔙 返回上一页
  goBack() {
    console.log('🔙 返回上一页');
    
    const { step } = this.data;
    
    // 🔥 根据当前步骤决定返回行为
    if (step === 'code') {
      // 从验证码界面返回到手机号界面
      this.setData({ 
        step: 'phone',
        code: '',
        codeArray: [],
        codeFocus: false, // 🔥 取消聚焦
        countdown: 0
      });
    } else if (step === 'phone') {
      // 从手机号界面返回到初始界面
      this.setData({ 
        step: 'initial',
        phone: '',
        code: '',
        codeArray: [],
        codeFocus: false, // 🔥 取消聚焦
        agreed: false      // ⚠️ 重置为未勾选状态
      });
    } else {
      // 从初始界面返回上一页或首页
      const pages = getCurrentPages();
      
      if (pages.length > 1) {
        // 如果有上一页，返回上一页
        wx.navigateBack({
          delta: 1
        });
      } else {
        // 如果没有上一页，跳转到首页
        wx.switchTab({
          url: '/pages/main/index'
        });
      }
    }
  }
});

